package com.rs.util;

import com.rs.cache.LocalCache;
import com.rs.entity.basic.MapDataPointVO;
import com.rs.entity.enums.NodeType;

import java.util.Map;

/**
 * @author zhouwz
 * @date 2020/7/19 18:20
 */
public class NodeUtil {

    /**
     * 获取点位字典
     *
     * @return 获取点位字典
     */
    public static Map<String, MapDataPointVO> getPointMap() {
        return LocalCache.pointMap;
    }

    /**
     * 获取点位字典
     *
     * @return 获取点位字典
     */
    public static Map<String, MapDataPointVO> getPointCodeMap() {
        return LocalCache.pointCodeMap;
    }

    /**
     * 获取点位字典
     */
    public static void putPointCodeMap(MapDataPointVO mapDataPointVO) {
        getPointCodeMap().put(mapDataPointVO.getNodeCode(), mapDataPointVO);
    }

    /**
     * 通过点位编号获取别名
     *
     * @param nodeCode 点位编号
     * @return 通过点位编号获取别名
     */
    public static String getNodeNameByCode(String nodeCode) {
        return getNodeByCode(nodeCode).getNodeName();
    }

    /**
     * 通过点位编号获取别名
     *
     * @param nodeCode 点位编号
     * @return 通过点位编号获取别名
     */
    public static MapDataPointVO getNodeByCode(String nodeCode) {
        return getPointCodeMap().get(nodeCode);
    }

    /**
     * 获取对应点位对象
     *
     * @param nodeName 点位别名(010000XY013000)
     * @return 获取对应点位对象
     */
    public static MapDataPointVO get(String nodeName) {
        return getPointMap().get(nodeName);
    }

    /**
     * 获取对应点位对象-集合大小(点位数量)
     *
     * @return 获取对应点位对象-集合大小(点位数量)
     */
    public static int getNodeSize() {
        return getPointMap().values().size();
    }

    /**
     * 新增对应点位对象
     *
     * @param mapDataPoint 地图点位对象
     */
    public static void put(MapDataPointVO mapDataPoint) {
        put(mapDataPoint.getNodeName(), mapDataPoint);
    }

    /**
     * 新增对应点位对象
     *
     * @param nodeName       点位别名(010000XY013000)
     * @param mapDataPointVO 点位对象
     */
    public static void put(String nodeName, MapDataPointVO mapDataPointVO) {
        getPointMap().put(nodeName, mapDataPointVO);
    }

    /**
     * 获取充电点
     *
     * @return 获取充电点
     */
    public static MapDataPointVO getChargeNode() {
        for (MapDataPointVO node : getPointMap().values()) {
            if (node.getNodeType().equals(NodeType.CHARGE.getCode())) {
                return node;
            }
        }
        return null;
    }
}
